# 读取"恋爱集合.xlsx" pandas
import pandas as pd
import os
from functools import lru_cache
from config import settings, ProductConfig


@lru_cache(maxsize=None)
def load_and_process_data(file_path):
    # 读取Excel文件
    df = pd.read_excel(file_path)

    # 把充值时间转换成日期格式
    df["充值时间"] = pd.to_datetime(df["充值时间"])

    # 定义一个函数来创建时间区间
    def create_time_interval(time):
        minutes = time.hour * 60 + time.minute
        interval_start = (minutes // 5) * 5
        interval_end = interval_start + 5
        return f"{interval_start//60:02d}:{interval_start%60:02d}-{interval_end//60:02d}:{interval_end%60:02d}"

    # 创建新列 '时间区间'
    df["时间区间"] = df["充值时间"].dt.time.apply(create_time_interval)

    # 根据时间区间进行分组，计算每个区间的实际金额总和
    grouped = df.groupby("时间区间")["实际金额"].sum().reset_index()

    # 添加累加金额列
    grouped["累加金额"] = grouped["实际金额"].cumsum()

    # 计算总实际金额
    总实际金额 = grouped["实际金额"].sum()

    # 添加累加占比列
    grouped["累加占比"] = grouped["累加金额"] / 总实际金额

    return grouped


def get_excel_file_path(app_name):
    for product, config in settings.PRODUCTS.items():
        if isinstance(config.excel_file, dict):
            if app_name in config.excel_file:
                return config.excel_file[app_name]
        elif isinstance(config.excel_file, str) and product == app_name:
            return config.excel_file
    raise ValueError(f"未找到 {app_name} 的Excel文件配置")


def predict_daily_sales(current_sales_amount, app_name):
    file_path = get_excel_file_path(app_name)
    # 使用缓存加载和处理数据
    grouped = load_and_process_data(file_path)

    # 获取当前时间
    current_time = pd.Timestamp.now().time()
    # 筛选出 < current_time 的时间区间
    current_interval = grouped[
        grouped["时间区间"].apply(
            lambda x: pd.to_datetime(f'{x.split("-")[0]}', format="%H:%M").time()
            <= current_time
        )
    ]
    # 得出最后一个累积占比的值
    last_cumulative_ratio = current_interval["累加占比"].iloc[-1]

    # 推测出当前的实际销售额，并转换为整数
    predicted_daily_sales = int(current_sales_amount / last_cumulative_ratio)

    return predicted_daily_sales


if __name__ == "__main__":
    current_sales = 1710
    predicted_sales = predict_daily_sales(current_sales, app_name="aibangzhu")
    print(f"预测今日总销售额：{predicted_sales:.2f}")

    # 如果需要清除缓存（例如，文件已更新），可以使用：
    # load_and_process_data.cache_clear()
